/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wasolicitudesfiec.logicacontrol.SolicitarCambioCarrera;

import web.util.Constantes;
import com.thoughtworks.xstream.XStream;
import entidad.Parametro;
import entidad.Persona;
import entidad.cambioCarrera.Solicitudcambiocarrera;
import hero.interfaces.BnNodeValue;
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.FacesContext;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import org.apache.batik.transcoder.TranscoderException;
import wasolicitudesfiec.CambioCarreraoEspecializacion.ImprimirInformeSTA;
import wasolicitudesfiec.general.MensajeException;
import wasolicitudesfiec.logicacontrol.*;
import wasolicitudesfiec.xsl.pdf.Transformador;

/**
 *
 * @author kabad
 */
public class CTRL_ImprimirInformeSTA extends CTRL_Base {

    private ImprimirInformeSTA gui;
    private String nombreActividad = Constantes.SolicitarCambio.imprimirInformeSTA;
    private String pathInforme;
    private int idSolicitud;
    String nombreInstancia;

    public CTRL_ImprimirInformeSTA(ImprimirInformeSTA gui, FacesContext facesContext) {
        super(facesContext);
        this.gui = gui;
        String instancia;
        instancia = (String) externalContext.getRequestParameterMap().get("instancia");
        if (instancia != null) {
            externalContext.getSessionMap().put("instancia", instancia);
        }
    }

    public String getPathInforme() {
        return pathInforme;
    }

    public void inicializar() throws MensajeException {
        gui.getMenu().setTitulo(Constantes.Modelo.modelo_SolicitarCambioCarrera + " -> " + nombreActividad);

        Solicitudcambiocarrera solicitudCambio;
        try {
            nombreInstancia = getNombreInstanciaProceso();
            this.inicializarInstancia(nombreInstancia);
            idSolicitud = Integer.parseInt((String) prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitudCambio = logica.getLogCambioCarrera().leerSolicitudCambioNivel2(idSolicitud);
            gui.setIdSolicitud(idSolicitud);
            gui.getLblCarreraActual().setText(solicitudCambio.getCarreraActual().getNombre());
            gui.getLblCarreraNueva().setText(solicitudCambio.getCarreraNueva().getNombre());
            gui.getLblNombre().setText(solicitudCambio.getEstudiante().getPersona().getNombres() + " " +
                    solicitudCambio.getEstudiante().getPersona().getApellidos());
            gui.getLblMatricula().setText(solicitudCambio.getEstudiante().getMatricula());
            if (solicitudCambio.getFkIdProfesor() != 0) {
                String recomendacion = "Tomando en consideración la recomendacion del evaluador: ";
                recomendacion += solicitudCambio.getProfesor().getPersona().toString() + ". " + solicitudCambio.getObservacionCoordinador();
                gui.getTxtResolucion().setValue(recomendacion);
            }

//            String path = generarInforme(idSolicitud);
//               gui.getLinkInforme().setUrl(Constantes.Rutas.rutaArchivos + path);
            gui.getLinkInforme().setUrl("/faces/CambioCarreraoEspecializacion/Informe.jsp" + "?idSolicitud=" + solicitudCambio.getIdSolicitudCambioCarrera());


        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception exception) {
            exception.printStackTrace();
            Logger.getLogger(CTRL_VolverASolicitar.class.getName()).log(Level.SEVERE, null, exception);
            throw new MensajeException(Constantes.Mensajes.noInicia);
        }
    }

    public String getNombreInstanciaProceso() {
        String instancia;
        instancia = (String) externalContext.getSessionMap().get("instancia");
        return instancia;
    }
    //genera pdf informe para sta

    private String generarInforme(int idSolicitud) throws SQLException, TransformerConfigurationException, IOException, TransformerException, TranscoderException, Exception {
        Solicitudcambiocarrera solicitud;
        Transformador transformador = new Transformador();
        String path = "";
        solicitud = logica.getLogCambioCarrera().leerSolicitudCambioNivel2(idSolicitud);
        Date fecha = new Date();
        Timestamp fechaActual = new Timestamp(fecha.getTime());
        fechaActual.setNanos(0);
        solicitud.setFechamodificacion(fechaActual);
        //conversion a xml usando xstream
        XStream xstream = new XStream();
        xstream.alias("informe", Solicitudcambiocarrera.class);
        String xml = xstream.toXML(solicitud);

        path = transformador.doIt(Constantes.Modelo.modelo_SolicitarCambioCarrera, xml, nombreInstancia, this.externalContext, null);
        this.pathInforme = path.replaceAll(" ", "%20");
        return this.pathInforme;
    }

    public void realizarActividad() throws MensajeException {

        BnNodeValue actividad;
        Solicitudcambiocarrera solicitud;
        try {
            this.inicializarInstancia(nombreInstancia);
            actividad = usrSession.getNode(nombreInstancia, nombreActividad);
            if (!(actividad != null &&
                    (actividad.getState() == hero.interfaces.Constants.Nd.READY ||
                    actividad.getState() == hero.interfaces.Constants.Nd.ANTICIPABLE))) {
                throw new Exception();
            }
            int idSolicitud = Integer.parseInt((String) prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitud = logica.getLogCambioCarrera().leerSolicitudCambio(idSolicitud);
            solicitud.setResolucion((String) gui.getTxtResolucion().getValue());
            Persona secretaria = logica.leerPersonaPorUsuario(usuario.getUsuario());
            solicitud.setFkIdSecretaria(secretaria.getIdPersona());
            solicitud.setEstado(Constantes.EstadoSolicitud.Terminada.toString());

            solicitud = logica.getLogCambioCarrera().guardarYClonarSolicitudCambio(solicitud);
            prjSession.setNodeProperty(nombreActividad, Constantes.Atributo.idSolicitudActividad, solicitud.getIdSolicitudCambioCarrera() + "");
            usrSession.startActivity(nombreInstancia, nombreActividad);
            usrSession.terminateActivity(nombreInstancia, nombreActividad);
        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception ex) {
            Logger.getLogger(CTRL_VolverASolicitar.class.getName()).log(Level.SEVERE, null, ex);

            throw new MensajeException(Constantes.Mensajes.noGuarda);
        }
    }

    public void guardar() throws MensajeException {
        Solicitudcambiocarrera solicitud;
        try {
            idSolicitud = Integer.parseInt((String) prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitud = logica.getLogCambioCarrera().leerSolicitudCambio(idSolicitud);
            solicitud.setResolucion((String) gui.getTxtResolucion().getValue());
            Persona secretaria = logica.leerPersonaPorUsuario(usuario.getUsuario());
            solicitud.setFkIdSecretaria(secretaria.getIdPersona());
            solicitud = logica.getLogCambioCarrera().guardarYClonarSolicitudCambio(solicitud);
             } catch (MensajeException ex) {
            throw ex;
        } catch (Exception ex) {
            Logger.getLogger(CTRL_VolverASolicitar.class.getName()).log(Level.SEVERE, null, ex);

            throw new MensajeException(Constantes.Mensajes.noGuarda);
        }
    }
}
